package cn.kgc.javaweb.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author: mosin
 * @version: v1.0  2022/6/24
 *
 * servlet  生命周期
 *
 * 1.创建时机   第一次请求时  单例的
 * 2.init()    对象创建之后 自动调用   一次   加载资源
 * 3.service()   请求一次 调用一次
 * 4.destroy()    服务器正常关闭   执行一次  释放资源
 *
 *
 * Filter 生命周期
 * 1. 创建时机      tomcat 启动时创建
 * 2.doFilter()   请求一次 调用一次
 * 3.init()调用时机   Filter 实体类对象创建完成后 自动调用   调用一次
 * 4.destroy()调用时机   服务器正常关闭   执行一次
 */
//@WebFilter("/*")
public class AUserLoginFilter implements Filter {


    public AUserLoginFilter(){
        System.out.println("UserLoginFilter()");
    }

    //初始化方法
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init()");
    }

    // 判定是否放行的方法
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        System.out.println("doFilter()");


        //判定用户是否登录
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;

        HttpSession session = req.getSession();
        String username =(String) session.getAttribute("username");


        String servletPath = req.getServletPath();
        System.out.println("servletPath = " + servletPath);

        String requestURI = req.getRequestURI();
        System.out.println("requestURI = " + requestURI);
        StringBuffer requestURL = req.getRequestURL();
        System.out.println("requestURL = " + requestURL);

        //判定请求路径 放行特定页面  登录   注册
        if("/login.jsp".equals(servletPath)|| "/register.jsp".equals(servletPath)){
            chain.doFilter(request, response);
            return;
        }


        //放行静态资源


        if(servletPath.endsWith(".css")||servletPath.endsWith(".js")){
            chain.doFilter(request, response);
            return;
        }

        if(servletPath.startsWith("/static")){
            chain.doFilter(request, response);
            return;
        }




        //放行特定的请求  login  register
        String method = req.getParameter("method");
        if("login".equals(method)|| "register".equals(method)){
            chain.doFilter(request, response);
            return;
        }


        // 验证过滤器的执行顺序

            //System.out.println("UserLoginFilter1");
            //chain.doFilter(request, response);
            //System.out.println("UserLoginFilter2");


        if(username!=null){
            // 放行请求
            System.out.println("UserLoginFilter1");
            chain.doFilter(request, response);
            System.out.println("UserLoginFilter2");
        }else{
            // 将请求重定向到登录页
            resp.sendRedirect(req.getContextPath()+"/login.jsp");
        }

    }


    // 销毁方法 释放资源
    @Override
    public void destroy() {

        System.out.println("destroy()");
    }
}
